home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 2.iso / dist / fw_glimpse.idb / usr / freeware / src / glimpse-3.0 / agrep / re.h.z / re.h
C/C++ Source or Header  |  1997-09-09  |  4KB  |  141 lines

  1. /* Copyright (c) 1994 Sun Wu, Udi Manber, Burra Gopal.  All Rights Reserved. */
  2. /*************************************************************
  3.  *                                 *
  4.  *     Macros defining special characters.             *
  5.  *                                 *
  6.  *************************************************************/
  7.  
  8. #define NUL        '\0'
  9. #define ASCII_MIN   '\001'
  10. #define ASCII_MAX   '\177'
  11.  
  12. /*************************************************************
  13.  *                                 *
  14.  *     Macros defining lexical categories.             *
  15.  *                                 *
  16.  *************************************************************/
  17.  
  18. #define C_LIT    0   /* individual character literal */
  19. #define C_SET    1   /* character set literal        */
  20.  
  21. #define EOS        0    /* end-of-string */
  22. #define LITERAL        1
  23. #define OPSTAR        2
  24. #define OPALT        3
  25. #define OPOPT        4
  26. #define OPCAT        5
  27. #define LPAREN        6
  28. #define RPAREN        7
  29.  
  30. /*************************************************************
  31.  *                                 *
  32.  *     Macros for manipulating syntax tree nodes.         *
  33.  *                                 *
  34.  *************************************************************/
  35.  
  36. #define lit_type(x)    (x->l_type)
  37. #define lit_pos(x)    (x->pos)
  38. #define lit_char(x)    ((x->val).c)
  39. #define lit_cset(x)    ((x->val).cset)
  40.  
  41. #define tok_type(x)    (x->type)
  42. #define tok_val(x)    (x->val)
  43. #define tok_op(x)       (x->val->op)
  44. #define tok_lit(x)    ((x->val->refs).lit)
  45.  
  46. #define Op(x)        (x->op)
  47. #define Lit(x)        ((x->refs).lit)
  48. #define Child(x)    ((x->refs).child)
  49. #define Lchild(x)    ((x->refs).children.l_child)
  50. #define Rchild(x)    ((x->refs).children.r_child)
  51. #define Nullable(x)    (x->nullable)
  52. #define Firstpos(x)    (x->firstposn)
  53. #define Lastpos(x)    (x->lastposn)
  54.  
  55. /*************************************************************
  56.  *                                 *
  57.  *  Macros for manipulating DFA states and sets of states.   *
  58.  *                                 *
  59.  *************************************************************/
  60.  
  61. #define Positions(x)    (x->posns)
  62. #define Final_St(x)    (x->final)
  63. #define Goto(x, c)    ((x->trans)[c])
  64. #define Next_State(x)    ((x)->next_state)
  65.  
  66. /*************************************************************/
  67.  
  68. #define new_node(type, l, x)    \
  69. {\
  70.     extern void *malloc();\
  71. \
  72.     (l) = (type) malloc(sizeof(*(x)));\
  73.     if ((l) == NULL) {\
  74.         fprintf(stderr, "malloc failure in new_node\n");\
  75.         exit(2);\
  76.     }\
  77.     memset((l), '\0', sizeof(*(x)));\
  78. }
  79.  
  80. typedef struct {    /* character range literals */
  81.         char low_bd, hi_bd;
  82.     } *Ch_Range;
  83.  
  84. typedef struct ch_set {        /* character set literals */
  85.         Ch_Range elt;    /* rep. as list of ranges */
  86.         struct ch_set *rest;
  87.     } *Ch_Set;
  88.  
  89. typedef struct {    /* regular expression literal */
  90.         int pos;         /* position in syntax tree */
  91.         short l_type;    /* type of literal */
  92.         union {
  93.         char c;     /* for character literals */
  94.         Ch_Set cset; /* for character sets */
  95.         } val;
  96.     } *Re_Lit, *(*Re_lit_array)[];
  97.  
  98. typedef struct pnode {
  99.         int posnum;
  100.         struct pnode *nextpos;
  101.     } *Pset, *(*Pset_array)[];
  102.  
  103. typedef struct rnode {    /* regular expression node */
  104.         short op;     /* operator at that node */
  105.         union {
  106.         Re_Lit lit;        /* child is a leaf node */
  107.         struct rnode *child;    /* child of unary op */
  108.         struct {
  109.             struct rnode *l_child; 
  110.             struct rnode *r_child;
  111.         } children;        /* children of binary op */
  112.         } refs;
  113.         short nullable;
  114.         Pset firstposn, lastposn;
  115.     } *Re_node;
  116.  
  117. typedef struct {            /* token node */
  118.         short type;
  119.         Re_node val;
  120.     } *Tok_node;
  121.  
  122.  
  123. typedef struct snode {
  124.         Re_node val;
  125.         int size;
  126.         struct snode *next;
  127.     } *Stack;
  128.  
  129. typedef struct dfa_st {
  130.         Pset posns;
  131.         int final;        /* 1 if the state is a final state, 0 o/w */
  132.         struct dfa_st *trans[128];
  133.     } *Dfa_state;
  134.  
  135. typedef struct dfa_stset {
  136.         Dfa_state st;
  137.         struct dfa_stset *next_state;
  138.     } *Dfa_state_set;
  139.  
  140.  
  141.